package com.yupi.yuaiagent.agent;


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ReAct架构  思考 执行 回应
 */
@EqualsAndHashCode(callSuper = true)
@Slf4j
@Data
public abstract class ReActAgent extends BaseAgent{


    /**
     * 执行单个步骤 并返回结果
     * @return 步骤执行结果
     */
    @Override
    public String step() {
        try {
            boolean isContinue = think();
            if (!isContinue) {
                // 执行
                return "思考完成 --- 无需行动";
            }
            return act();
        } catch (Exception e) {
            // 记录异常日志
            e.printStackTrace();
            return "步骤执行失败：" + e.getMessage();
        }
    }

    /**
     * 思考是否要执行
     * @return 是否继续执行
     */
    public abstract boolean think();


    /**
     * 获取执行结果
     * @return 执行结果
     */
    public abstract String act();

}
